package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *  提高每次读写的数据量，减少读写的次数，可以提高读写效率
 *
 *  单字节读写是一种随机读写形式
 *  一组字节的读写是块读写形式
 *  对于机械硬盘和很多其他硬件而言，块读写的效率很好，但是随机读写性能差。
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("yyz自我介绍ppt.pptx");
        FileOutputStream fos = new FileOutputStream("yyz_cy.pptx");
        /*
            流提供了块读写操作
            InputStream定义的块读写操作
            int read(byte[] data)
            一次性读取给定义字节数组总长度的字节量并存入到该数组中，
            返回值表示实际读取到的字节数，若返回-1则表示没有读取到任何数据，
            且已经是文件末尾了

            块写操作
            将给定的自己数组中的所有字节一次性写出

            void write(byte[] data,int offset,int len)
            将给定的自己数组从下标offset处开始连续len个字节一次性写出
         */
        byte[] data = new byte[1024*10];
        int len;
        long start = System.currentTimeMillis();
        while ((len = fis.read(data)) != -1){
            fos.write(data,0,len);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕!耗时:"+(end-start)+"ms");
        fis.close();
        fos.close();

    }
}
